#ifndef PROTOCOL_H
#define PROTOCOL_H

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>






//***************************************************
//--------Begin------查询状态ServerClient共用----------
//***************************************************
typedef unsigned int uint;//设置无符号整型的别名

#define REGIST_OK "regist ok"
#define REGIST_FAILED "regist failed : name existed"

//登录查询状态
enum ENUM_LOGIN_ERROR_TYPE
{
    ENUM_LOGIN_ERROR_TYPE_MIN = 0x00000000,
    ENUM_LOGIN_ERROR_EMPTY_TYPE,//用户名或者密码为空
    ENUM_LOGIN_ERROR_NAME_TYPE,//用户名不存在
    ENUM_LOGIN_ERROR_PWD_TYPE,//密码错误
    ENUM_LOGIN_ERROR_ONLINE_TYPE,//用户已经在线
    ENUM_LOGIN_ERROR_ALLOW_TYPE,//允许用户登录
    ENUM_LOGIN_ERROR_TYPE_MAX = 0x0000000f,

};

//消息类型
enum ENUM_MSG_TYPE
{
    ENUM_MSG_TYPE_MIN = 0x0000000f,

    ENUM_MSG_TYPE_REGIST_REQUEST,//注册请求
    ENUM_MSG_TYPE_REGIST_RESPOND,//注册回复

    ENUM_MSG_TYPE_LOGIN_REQUEST,//登录请求
    ENUM_MSG_TYPE_LOGIN_RESPOND,//登录回复

    ENUM_MSG_TYPE_ALL_ONLINE_REQUEST, //在线用户请求
    ENUM_MSG_TYPE_ALL_ONLINE_RESPOND, //在线用户回复

    ENUM_MSG_TYPE_SEARCH_USR_REQUEST,//搜索用户请求
    ENUM_MSG_TYPE_SEARCH_USR_RESPOND,//搜索用户回应

    ENUM_MSG_TYPE_ADD_FRIEND_REQUEST,//添加好友请求
    ENUM_MSG_TYPE_ADD_FRIEND_RESPOND,//添加好友回复
    ENUM_MSG_TYPE_ADD_FRIEND_REQUEST_WAIT,//添加好友请求等待
    ENUM_MSG_TYPE_ADD_FRIEND_REQUEST_NOTIFY,//添加好友请求可以

    ENUM_MSG_TYPE_ADD_FRIEND_RESPOND_AGREE, //服务器转发同意加好友的回复消息
    ENUM_MSG_TYPE_ADD_FRIEND_RESPOND_REFUSE, //服务器转发不同意加好友的回复消息

    ENUM_MSG_TYPE_MAX = 0x0000001f,
};

//搜索用户消息类型
enum ENUM_SEARCH_TYPE
{
    ENUM_SEARCH_TYPE_MIN = 0x0000001f,
    ENUM_SEARCH_ERROR_NAME_TYPE,//用户名不存在
    ENUM_SEARCH_ONLINE_TYPE,//用户在线
    ENUM_SEARCH_OFFLINE_TYPE,//用户离线
    ENUM_SEARCH_TYPE_MAX = 0x0000002f,
};

//用户添加好友消息类型
enum ENUM_ADDFRIEND_TYPE
{
    ENUM_ADDFRIEND_TYPE_MIN = 0x0000002f,

    ENUM_ADDFRIEND_TYPE_EMPTY,//用户名或密码为空
    ENUM_ADDFRIEND_TYPE_ALWAYS,//两个人已经是好友了
    ENUM_ADDFRIEND_TYPE_SUCCESS,//两个人可以成为好友


    ENUM_ADDFRIEND_TYPE_WAIT,//等待回复
    ENUM_ADDFRIEND_TYPE_NOTIFY,//响应回复

    ENUM_ADDFRIEND_TYPE_AGREE,//添加好友
    ENUM_ADDFRIEND_TYPE_REFUSE,//拒绝添加





    ENUM_ADDFRIEND_TYPE_MAX = 0x0000003f,
};


//通讯消息
struct PDU
{
    uint uiPDULen;//总的协议数据单元的大小, 初始化
    uint uiMsgType;//消息类型, 未初始化
    char caData[64];//存放文件名, 未初始化
    uint uiMsgLen;//实际消息长度, 初始化
    int caMsg[];//实际消息, 通过这个数组去访问申请的内存空间, 初始化
};

//数据空间申请, 传递实际消息的长度
//获取数据单元首地址
PDU* mkPDU(uint uiMsgLen);




//***************************************************
//--------End------查询状态ServerClient共用----------
//***************************************************







#endif // PROTOCOL_H
